/* DateToStringConverter.java
{{IS_NOTE
Purpose:
Description:
History:
Thu Jan 15 15:33:43 2009, Created by Henri Chen
}}IS_NOTE
Copyright (C) 2009 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
}}IS_RIGHT
*/
package org.zkoss.zkplus.databind;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.zkoss.util.Locales;
import org.zkoss.util.TimeZones;
import org.zkoss.zk.ui.metainfo.Annotation;
import org.zkoss.zk.ui.sys.ComponentCtrl;
/**
* <p>Convert a {@link java.util.Date} or a {@link java.sql.Timestamp} to a
* formated date String. You can specify the date format in 'format' annotation,
* and the converter will format the given date for you. e.g.
* <pre>
* <label value="@{mydate, converter='org.zkoss.zkplus.databind.DateFormatConverter'}" self="@{format(yyyy/MM/dd)}"/>
* </pre>
* If format is not given, default to 'MM/dd/yyyy'.
*
* @author Henri Chen
* @since 3.0.9
* @deprecated As of release 7.0.0, replace with new ZK binding.
*/
public class DateFormatConverter implements TypeConverter, java.io.Serializable {
public Object coerceToBean(Object val, org.zkoss.zk.ui.Component comp) {
//do nothing
return val;
}
/**
* Depending whether the data is coming from the database or coming from the datebox
* we might be passed either a java.util.Date or a java.sql.Timestamp
*
* @see org.zkoss.zkplus.databind.TypeConverter#coerceToUi(java.lang.Object, org.zkoss.zk.ui.Component)
*/
public Object coerceToUi(Object val, org.zkoss.zk.ui.Component comp) {
Date date = null;
if (val instanceof Timestamp) {
final Timestamp timestamp = (Timestamp) val;
date = new Date(timestamp.getTime());
} else if (val instanceof Date) {
date = (Date) val;
}
final Annotation annot = ((ComponentCtrl) comp).getAnnotation(null, "format");
String pattern = null;
if (annot != null) {
pattern = annot.getAttribute("value");
}
if (date == null)
return "";
//prepare dateFormat and convert Date to String
final SimpleDateFormat df = new SimpleDateFormat(pattern == null ? "MM/dd/yyyy" : pattern,
Locales.getCurrent());
df.setTimeZone(TimeZones.getCurrent());
return df.format(date);
}
}